package com.sky.task;

import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

@Component
@Slf4j
public class OrderTask {
    @Autowired
    private OrderMapper orderMapper;

    /**
     * 处理订单超时方法
     */
    @Scheduled(cron = "0 * * * * ?")//每分钟触发一次
    public void processTimeOutOrder() {

        //根据待付款状态和订单时间来查询
        List<Orders> orders = orderMapper.getStatusAnOrderTime(Orders.PENDING_PAYMENT, LocalDateTime.now().plusMinutes(-15));

        //判断是否为空
        if (orders != null && orders.size() > 0) {
            for (Orders order : orders) {
                //设置状态
                order.setStatus(Orders.CANCELLED);
                //设置取消原因
                order.setCancelReason("订单超时，自动取消");

                //设置取消时间
                order.setCancelTime(LocalDateTime.now());
                //更新订单
                orderMapper.update(order);
            }
        }
    }

    /**
     * 定时处理订单状态一直处于派送中的
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void processTimeOutOrderDilvery() {
    //根据待付款状态和订单时间来查询
        List<Orders> orders = orderMapper.getStatusAnOrderTime(Orders.DELIVERY_IN_PROGRESS, LocalDateTime.now().plusHours(-1));
        //判断是否为空
        if (orders != null && orders.size() > 0) {
            for (Orders order : orders) {
                //设置状态
                order.setStatus(Orders.COMPLETED);
                //设置取消原因
                order.setCancelReason("订单超时，自动取消");

                //设置取消时间
                order.setCancelTime(LocalDateTime.now());
                //更新订单
                orderMapper.update(order);
            }
        }
    }

//@Autowired
//private WebSocketServer socketServer;
//    /**
//     * 测试实时播报消息修改订单的状态和支付状态
//     */
//    @Scheduled(cron = "0 * * * * ?")
//    public void testOrder(){
//        // 根据订单号查询当前用户的订单
//        Long userId = 27l;
//        String orderNumber="1699241699437";
//        Orders ordersDB = orderMapper.getByNumberAndUserId(orderNumber, userId);
//
//        // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
//        Orders orders = Orders.builder()
//                .id(ordersDB.getId())
//                .status(Orders.TO_BE_CONFIRMED)
//                .payStatus(Orders.PAID)
//                .checkoutTime(LocalDateTime.now())
//                .build();
//        log.info("订单状态已经修改!{}",82l);
//        orderMapper.update(orders);
//
//
//        //支付成功后发送websocket请求
//        Map map = new HashMap();
//        map.put("type",1);
//        map.put("orderId",ordersDB.getId());
//        map.put("content","订单号:"+orderNumber);
//        String s = JSON.toJSONString(map);
//        socketServer.sendToAllClient(s);
//    }
}
